package com.ffggffgfv.backend.mapper;

import com.ffggffgfv.backend.entity.Cart;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 购物车数据访问层
 */
@Mapper
public interface CartMapper {

    /**
     * 通过用户ID查询购物车项
     *
     * @param userId 用户ID
     * @return 购物车项列表
     */
    List<Cart> selectByUserId(Long userId);

    /**
     * 通过用户ID和商品ID查询购物车项
     *
     * @param userId    用户ID
     * @param productId 商品ID
     * @return 购物车项
     */
    Cart selectByUserIdAndProductId(@Param("userId") Long userId, @Param("productId") Long productId);

    /**
     * 插入购物车项
     *
     * @param cart 购物车对象
     * @return 影响行数
     */
    int insert(Cart cart);

    /**
     * 更新购物车项
     *
     * @param cart 购物车对象
     * @return 影响行数
     */
    int update(Cart cart);

    /**
     * 删除购物车项
     *
     * @param id 购物车项ID
     * @return 影响行数
     */
    int deleteById(Long id);

    /**
     * 删除用户购物车中指定的商品
     *
     * @param userId    用户ID
     * @param productId 商品ID
     * @return 影响行数
     */
    int deleteByUserIdAndProductId(@Param("userId") Long userId, @Param("productId") Long productId);

    /**
     * 清空用户购物车
     *
     * @param userId 用户ID
     * @return 影响行数
     */
    int deleteByUserId(Long userId);

    /**
     * 更新购物车商品的选中状态
     *
     * @param userId    用户ID
     * @param productId 商品ID
     * @param selected  选中状态（0-未选中 1-选中）
     * @return 影响行数
     */
    int updateSelected(@Param("userId") Long userId,
                       @Param("productId") Long productId,
                       @Param("selected") Integer selected);

    /**
     * 批量更新用户购物车中所有商品的选中状态
     *
     * @param userId   用户ID
     * @param selected 选中状态（0-未选中 1-选中）
     * @return 影响行数
     */
    int updateAllSelected(@Param("userId") Long userId, @Param("selected") Integer selected);

    /**
     * 根据ID查询购物车项
     *
     * @param id 购物车项ID
     * @return 购物车项
     */
    Cart selectById(Long id);
}
